1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | METHOD FB_Init : BOOL VAR_INPUT split the variable path into an array, and determine some object characteristics ========================================================================================================*) IF FIND(STR1:= _VarNameArray[VarNameIndex].Name, STR2:= '_') = 1 THEN //check if this is an array, if yes then remove the array index from the variable name endarraystr:= FIND(STR1:= _VarNameArray[VarNameIndex].Name, STR2:= ']'); IF (startarraystr <> 0) AND (endarraystr <> 0) THEN _VarNameArray[VarNameIndex].ArrayIndex:= STRING_TO_UINT(MID( STR:= _VarNameArray[VarNameIndex].Name, LEN:= endarraystr-startarraystr-1, POS:= startarraystr+1 )); _VarNameArray[VarNameIndex].Name:= Standard.DELETE( LEN:= endarraystr-startarraystr+1, POS:= startarraystr ); IF (_VarNameArray[VarNameIndex].Name = 'Application') THEN //was this the application level? VarNameEnd:= VarNameBegin - 2; //end of the next variable names is known, store for next loop StringIndex:= VarNameBegin - 2; ELSE StringIndex:= StringIndex - 1; END_IF END_WHILE //figure out whether this variable is the first value of a new JSON object, or if the previous variable is the last value of a JSON object IF __ISVALIDREF(PrevNameArray) THEN offset:= _ParentVar - PrevParentVar; //check if the variable names have shifted up or down IF (offset < 0) THEN //objects shifted down stoploop:= PrevParentVar - 1; startloop:= 1; //no shift, or shift up stoploop:= _ParentVar - 1; startloop:= offset + 1; FOR varlevelindex:= startloop TO stoploop DO prevvarlevelindex:= varlevelindex - offset; IF (offset < 0) AND (varlevelindex = 1) THEN IF ((varlevelindex-offset) > 1) AND ((_VarNameArray[varlevelindex].Name <> PrevNameArray[prevvarlevelindex].Name) OR (_VarNameArray[varlevelindex].ArrayIndex <> PrevNameArray[prevvarlevelindex].ArrayIndex)) THEN //end previous object IF (PrevNameArray[prevvarlevelindex].ArrayIndex > 0) AND (_VarNameArray[varlevelindex].Name <> PrevNameArray[prevvarlevelindex].Name) THEN //end array PrevNameArray[prevvarlevelindex].EndArray:= TRUE; END_IF IF (varlevelindex > 1) AND ((NOT _VarNameArray[varlevelindex].NewArray) AND (_VarNameArray[varlevelindex].Name <> PrevNameArray[prevvarlevelindex].Name) OR (_VarNameArray[varlevelindex].ArrayIndex <> PrevNameArray[prevvarlevelindex].ArrayIndex)) THEN //new object //invalid reference to PrevNameArray, this must be the first variable FOR varlevelindex:= 1 TO _ParentVar-1 DO IF (varlevelindex > 1) THEN //every level above 1 will be a new object _VarNameArray[varlevelindex].NewObject:= TRUE; IF (_VarNameArray[varlevelindex].ArrayIndex = 1) THEN END_IF END_IF //set a reference to some variables for the next JSON variable PrevNameArray REF= _VarNameArray; PrevParentVar REF= _ParentVar; |